A storage server is a computer that provides storage service relating to the organization of data on writable, storage media, such as non-volatile memories and disks. The storage server may be configured to operate according to a client/server model of information delivery to enable many clients (e.g., applications) to access the data served by the system. The storage server can employ a storage architecture that serves the data with both random and streaming access patterns at either a file level, as in network attached storage (NAS) environments, or at the block level, as in a storage area network (SAN).
Storage servers store data on various types of non-volatile storage media such as, for example, relatively high latency (i.e., longer access times) hard disk drive devices (HDDs) and relatively low latency (i.e., shorter access times) solid-state devices (SSDs). Access time (or latency) is the period of time required to retrieve data from a storage device. In HDDs, disk access time is determined by the sum of the spin-up time, the seek time, rotational delay and data transfer time. Spin-up time is the time required to accelerate a disk to operating speed. Seek time is the time for the access arm to reach the desired disk track. Rotational delay is the delay for the rotation of the disk to bring the required disk sector under the read-write mechanism and generally depends on rotational speed of a disk measured in RPMs. Data transfer time is a time during which data is actually read or written to/from a storage medium at a certain bandwidth.
HDDs store digitally encoded data on rapidly rotating platters with magnetic surfaces. However, HDDs access data mechanically, and therefore, access times in HDDs can be relatively slow because of mechanical delays. As a result, HDDs generally provide good streaming performance (e.g., reading of large sequential blocks or “track reads”) but do not perform well on random access (i.e., reading and writing of individual disk sectors) due to slow access times. SSDs on the other hand, are more suitable for random and frequent memory accesses because of the relatively low latency. SSD data storage devices use solid-state memory, such as non-volatile flash memory to store persistent data. With no moving parts, solid-state devices do not have mechanical delays resulting in the high latency experienced by HDDs and seek time is decreased significantly, making the SSDs very fast. SSD memory has this and other advantages over traditional disk drives. However, SSD memories are generally more expensive than HDD memories and have a shorter operational lifetime due to wear and other degradation.
One way to improve performance of a storage server is through the use of hybrid storage media, e.g., by intermixing relatively expensive electronic storage, such as SSDs, with relatively inexpensive magnetic storage, such as HDDs, to provide a total storage space of the system. Typically, users or administrators of such storage servers identify and isolate frequently accessed (i.e., “hot”) data that could most benefit from being stored in the faster SSDs, with the remaining data being stored on the HDDs. However, identification and isolation of such hot data is normally performed and enforced manually, thus requiring time-consuming levels of effort by administrators. In addition, administrators of such storage servers can make decisions to configure the physical layout of the SSDs and HDDs to create one or more volumes, where each volume has a logical arrangement of block numbers, known as logical block numbers (LBNs), used to organize data. The administrators may then render decisions to employ static or fixed allocations of the data. For example, the data associated with a first range of LBNs may be placed in one group of storage based on SSDs, while data associated with a second range of LBNs may be placed in another group of storage based on HDDs. However, implementation of such fixed data allocation decisions is time-consuming and expensive, particularly when changes are made to the allocations.